package zmj.test.javaparser.ast;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseResult;
import com.github.javaparser.ast.expr.AssignExpr;
import com.github.javaparser.printer.DotPrinter;
import com.github.javaparser.printer.XmlPrinter;
import com.github.javaparser.printer.YamlPrinter;

import java.util.Optional;

/**
 * 通过打印赋值表达式 x = 3 的AST结构，测试 AST 打印
 *
 * @author maijun
 * @since 2020-12-12
 */
public class AstPrinter {
    public static void main(String[] args) {
        ParseResult<AssignExpr> exprResult = new JavaParser().parseExpression("x = 3 + 4");
        Optional<AssignExpr> expr = exprResult.getResult();
        // 1. Yaml格式输出打印
        expr.ifPresent(YamlPrinter::print);

        // 2. XML格式输出打印
        expr.ifPresent(XmlPrinter::print);

        // 3. dot打印(可以通过Graphiz dot命令，将输出生成为图片格式，例如 dot -Tpng ast.dot > ast.png)
        expr.ifPresent(e -> System.out.println(new DotPrinter(true).output(e)));
    }
}
